package cn.tedu.api;

import java.util.Arrays;

/**本类用来测试String类的常用方法*/
public class TestString2 {
    public static void main(String[] args) {
        //1.使用两种创建方式,创建字符串,存数据abc
        char[] value={'a','b','c'};
        String s1 = new String(value);

        String s2 = "abc";

        //2.测试常用方法
        /**String重写了hashCode(),是根据字符串的具体内容生成哈希码值,而不是根据地址值生成
         * 所以虽然s1与s2的地址值不同,但是他们的哈希码值一样*/
        System.out.println(s1.equals(s2));//true
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());

        /**String也重写了Object中的toString(),打印的是字符串的具体内容*/
        System.out.println(s1);//ab

        System.out.println(s1.length());//3,查看当前字符串的长度
        System.out.println(value.length);
        System.out.println(s1.toUpperCase());//ABC,将本字符串转为全大写
        System.out.println(s1);
        System.out.println(s1.toLowerCase());//abc,将本字符串转为全小写
        System.out.println(s1.startsWith("a"));//true,判断本字符串是否以元素a开头
        System.out.println(s1.startsWith("c"));//false,判断本字符串是否以元素a开头
        System.out.println(s1.endsWith("a"));//false,判断本字符串是否以元素a结尾
        System.out.println(s1.endsWith("c"));//true,判断本字符串是否以元素a结尾

        System.out.println(s1.charAt(0));//a 根据下标获取本字符串中对应位置上的元素

        String s3 = "abcbdbba";
        System.out.println(s3.indexOf("b"));//1 返回指定字符第一次出现的下标
        System.out.println(s3.lastIndexOf("b"));//6 返回指定元素最后一次出现的下标值
        System.out.println(s3.indexOf("a"));//0

        System.out.println(s2.concat("cxy"));//abccxy 将指定字符串拼接到本字符串的结尾
        System.out.println(s2);//abc 说明上面的拼接是临时的,不会改变原串s2的内容

        String s4 = s2.concat("aaa");//如果想要多次使用拼接后的结果,需要定义一个字符串保存结果
        System.out.println(s4);//abcaaa

        String s5 = "afbfcfdfe";
        //返回值类型是String[],所以需要用Arrays.toString()打印
        //以指定字符作为分隔符,分割当前的字符串
        String[] a = s5.split("f");
        System.out.println(Arrays.toString(a));//[a,b,c,d,e]
        //我们也可以遍历数组,拿到数组中每个元素
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
        String s6 = "    hh hhh    ";//去除字符串首尾两端的空格
        System.out.println(s6.trim());//hh hhh

        String s7 = "abcdefgh";
        System.out.println(s7.substring(3));//defgh 从指定下标出开始截取子串[3,结束]
        System.out.println(s7.substring(3,6));//def 从指定下标出开始截取子串[3,6)含头不含尾

        System.out.println(20+10);//30,int+int->计算效果
        System.out.println("20"+10);//2010,String+int->拼接效果
        System.out.println(String.valueOf(10));//10
        System.out.println(String.valueOf(80.2)+10);//80.210 将int类型的80转为String类型

        byte[] bs = s7.getBytes();//将指定字符串转为byte[]
        System.out.println(Arrays.toString(bs));
        for (int i = 0; i < bs.length; i++) {
            System.out.println(bs[i]);

        }

    }

}


